import { Decimal } from 'decimal.js'

// 赤道半径
const EQUATORIAL_RADIUS = new Decimal(6378137.0)
// 极半径
const POLAR_RADIUS = new Decimal(6356725.0)
// 地球平均半径
const EARTH_RADIUS = new Decimal(6371004)

/**
 *经度转弧度
 *
 * @param {*} distance
 * @param {*} latitude
 */
function _lng2Degree (distance, latitude) {
  const degree = Decimal.asin(Decimal.sin(distance.div(EARTH_RADIUS.mul(2))).div(Decimal.cos(latitude.mul(Math.PI).div(100)))).mul(2)
  return degree.mul(180).div(Math.PI)
}

/**
 *纬度转弧度
 *
 * @param {*} distance
 */
function _lat2Degree (distance) {
  return distance.div(EARTH_RADIUS).mul(180).div(Math.pi)
}

/**
 *获取原点
 *
 * @param {*} x 像素x
 * @param {*} y 像素y
 * @param {*} lng 点位经度
 * @param {*} lat 点位纬度
 * @param {number} [rate=1.0] 比例尺
 * @returns
 */
function getOrigin (x, y, lng, lat, rate = 1.0) {
  x = new Decimal(x)
  y = new Decimal(y)
  lng = new Decimal(lng)
  lat = new Decimal(lat)
  if (rate === 0) {
    return {
      lng: 0,
      lat: 0
    }
  }
  const originLat = lat.sub(_lat2Degree(y.div(rate)))
  const originLng = lng.sub(_lng2Degree(x.div(rate), originLat))
  return {
    lng: originLng,
    lat: originLat
  }
}

export default {
  getOrigin
}
